package lee.study.ClassesAndObjects.OuterClassAndInnerClass;


class OuterClass {
    public int data1;
    public static int data2;

    //1.实例内部类-->看做一个普通的实例数据变量。

    //如何拿到实例内部类的对象？
    //1.1先要有一个外部类对象：OuterClass outerclass=new OuterClass();
    //1.2通过外部类的对象来定义内部类的对象：
    //OuterClass.InnerClass innerClass = o1.new InnerClass();

    class InnerClass {
        public int data3;

        //注意:不能这样写
        //public static int data4=1;
        //内部类的调用依赖于外部类的实例化对象，
        // 而static不依赖外部类的实例对象，所有不能这样写

        public static final int data4 = 1;
        //可以将静态数据定义为常量，常量是在编译时就初始化了

        public void func() {
            System.out.println(this.data3);//内部类调用自己的属性
            System.out.println(OuterClass.this.data1);//调用外部类的属性
        }
    }
}

public class InstanceInnerClass {//内部类

    //2.静态内部类
    //3.匿名内部类
    public static void main(String[] args) {
        OuterClass o1 = new OuterClass();
        OuterClass.InnerClass innerClass = o1.new InnerClass();
    }
}
